<!DOCTYPE html>
<html lang="ja">

<head>
	<meta charset="UTF-8"/>
	<meta name="keywords" content="スクリプトメニュー, スクリプト, スクリプティング"/>
	<link rel="stylesheet" href="../../Shared/sty/standard.css"/>
	<script defer src="../../Shared/js/toc.js"></script>
	
	<title>MacのCotEditorでUNIXスクリプトを使って作業を自動化する</title>
</head>

<body>

<h1>MacのCotEditorでUNIXスクリプトを使って作業を自動化する</h1>

<p>このページではスクリプトメニューから実行するUNIXスクリプトにCotEditorで編集中の書類の情報やテキストを渡したり、スクリプトの実行結果を書類に反映する方法を説明します。</p>

<ul>
	<li><p>スクリプトメニューに登録できるスクリプトの拡張子は.sh、.pl、.php、.rb、.py、.js、.awk、.swiftです（言語は関係ありません）。</p></li>
	<li><p>スクリプトには実行権限がなければなりません。</p></li>
</ul>


<section>
<h2>ファイルパスを参照する</h2>

<p>現在の書類が保存済みのときは、その書類の絶対ファイルパスが引数 (argv) としてスクリプトに渡されます。</p>
</section>


<section>
<h2>スクリプトにテキストを渡す</h2>

<p>現在の書類の内容を標準入力としてスクリプトに渡すことができます。スクリプトにCotEditorからデータを渡すには、スクリプトの冒頭にコメントを置き、固定テキスト「<code>%%%{CotEditorXInput=<var>xxxx</var>}%%%</code>」を埋め込みます。「<code><var>xxxx</var></code>」で、受け渡すデータを指定します。このコメントを記述しなかった場合は「<code>None</code>」と同等の処理となり何もスクリプトに渡されません。</p>

<ul>
	<li><p>スクリプトに渡されるテキストのテキストエンコーディングはUTF-8です。</p></li>
</ul>

<table>
	<thead>
		<tr><th>キーワード</th><th>説明</th></tr>
	</thead>
	<tbody>
		<tr><th><code>Selection</code></th><td>現在選択しているテキスト</td></tr>
		<tr><th><code>AllText</code></th><td>書類のすべてのテキスト</td></tr>
		<tr><th><code>None</code></th><td>何も渡さない（デフォルト）</td></tr>
	</tbody>
</table>
</section>


<section>
<h2>スクリプトの出力を受け取る</h2>

<p>スクリプトから標準出力に送ったテキストはCotEditorで受け取り書類などに反映できます。CotEditorでスクリプトの出力を受け取るには、スクリプトの冒頭にコメントとして固定テキスト「<code>%%%{CotEditorXOutput=<var>xxxx</var>}%%%</code>」を埋め込み、「<code><var>xxxx</var></code>」で受け取ったあとの処理を指定します。このコメントを記述しなかった場合は「<code>Discard</code>」と同等の処理となり出力は無視されます。</p>

<ul>
	<li><p>CotEditorに返すテキストのテキストエンコーディングはUTF-8でなければなりません。</p></li>
</ul>

<table>
	<thead>
		<tr><th>キーワード</th><th>説明</th></tr>
	</thead>
	<tbody>
		<tr><th><code>ReplaceSelection</code></th><td>現在選択しているテキストを出力内容で置き換えます。</td></tr>
		<tr><th><code>ReplaceAllText</code></th><td>書類のすべてのテキストを出力内容で置き換えます。</td></tr>
		<tr><th><code>InsertAfterSelection</code></th><td>選択範囲の直後に出力内容を挿入します。</td></tr>
		<tr><th><code>AppendToAllText</code></th><td>書類の末尾に出力内容を挿入します。</td></tr>
		<tr><th><code>NewDocument</code></th><td>新規書類を作成し、そこに出力内容を挿入します。</td></tr>
		<tr><th><code>Pasteboard puts</code></th><td>クリップボードに出力内容を格納します。</td></tr>
		<tr><th><code>Discard</code></th><td>何もしない（デフォルト）</td></tr>
	</tbody>
</table>
</section>


<section>
<h2>コンソールにテキストを表示する</h2>

<p>標準エラー出力に投げられたテキストはコンソールウインドウに出力されます。</p>
</section>


<section>
<h2>スクリプトを書く</h2>

<p>例えば、以下のPythonスクリプトは、現在の書類の選択範囲内のすべての行の行頭に「&gt;」を追加し、さらに処理した行数をコンソールに表示します。</p>

<pre class="source"><code><span class="comment">#!/usr/bin/env python3
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%</span>

<span class="keyword">import</span> sys

count = 0
<span class="keyword">for</span> line <span class="keyword">in</span> sys.stdin:
    count += 1
    print(<span class="string">&quot;&gt;&quot;</span> + line.rstrip())
sys.stderr.write(<span class="string">&quot;Processed {} lines.&quot;</span>.format(count))
</code></pre>

<figure>
	<figcaption>コンソールへの出力結果</figcaption>
	<img srcset="../gfx/console@2x.png 2x" alt="[2022-05-06 18:35:00] Example Code&#x0A;Processed 3 lines."/>
</figure>

<p>ほかにも、以下のサイトから様々なサンプルスクリプトを入手できます:<br/>
<a href="https://github.com/coteditor/SampleScripts" rel="external">coteditor/SampleScripts -GitHub</a></p>
</section>


<section id="cf">
<h2>関連項目</h2>
<ul>
	<li><a href="script_overview.html">MacのCotEditorの作業をスクリプトで自動化する</a></li>
</ul>
</section>

</body>
</html>
